package process

import (
	"chat/common/msg"
	"chat/utils"
	"encoding/json"
	"fmt"
	"net"
	"os"
	"strconv"
)

// 登录成功显示界面
func ShowLoginSuccessMenu() {
	userId := CurrUser.UserId
	userIdStr := strconv.Itoa(userId)
	fmt.Println("----恭喜" + userIdStr + "登录成功----")
	fmt.Println("---- 1 用户在线列表 ----")
	fmt.Println("---- 2 发送消息 ----")
	fmt.Println("---- 3 信息列表 ----")
	fmt.Println("---- 4 退出系统 ----")
	fmt.Println("---- 请选择（1-4）----")
	var key int
	var content string
	fmt.Scanf("%d\n", &key)

	// 总会使用到 SmsProcess
	smsProcess := &SmsProcess{}

	switch key {
	case 1:
		fmt.Println("用户在线列表")
		outputOnlineUser()
	case 2:
		fmt.Println("【发送消息】你想对大家说什么：")
		fmt.Scanf("%s", &content)

		smsProcess.SendGroupMes(content)

	case 3:
		fmt.Println("信息列表")
	case 4:
		fmt.Println("你选择了退出系统")
		// 通知服务器
		os.Exit(0)
	default:
		fmt.Println("选择错误")
	}
}

// 启动协程 保存和服务端的通讯
func serverProcess(conn net.Conn) {
	// 创建 transfer  读取消息
	tf := &utils.Transfer{
		Conn: conn,
	}
	for {
		fmt.Println("客户端正在等待读取消息")
		sms, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("client serverProcess ReadPkg err is ", err)
			return
		}
		fmt.Println("客户端读取消息=", sms)
		switch sms.Type {
		case msg.NotifyUserStatusType:
			// 有人上线
			// 客户端也要维护自己的在线好友列表 map[int]User
			var notifyUserStatus msg.NotifyUserStatus
			err := json.Unmarshal([]byte(sms.Data), &notifyUserStatus)
			if err != nil {
				fmt.Println("client serverProcess Unmarshal err is ", err)
				return
			}
			// 更新用户状态
			// 显示在线用户列表
			updateUserStatus(&notifyUserStatus)

		case msg.SmsMesType:
			// 接收群发消息
			outputGroupMes(&sms)

		default:
			fmt.Println("服务器返回了未知消息类型")

		}
	}
}
